//
//  main.m
//  C7_结构体
//
//  Created by dllo on 15/10/14.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>


// 声明一个结构体
// 关键字(struct) 结构体名(student) {

//  结构体成员...

//};
//struct student {
//
//    char name[20];
//    char sex;
//    float score;
//    int age;
//    
//};
typedef struct student{
    
    char name[20];
    char sex;
    float score;
    int age;
    
} Student;

struct rect {

    float length;
    float wide;

};

struct diciple{

    char name[20];
    int age;
    float score;

};

// 简单类型的结构体变量作为函数形参
void testStruct(struct student stu)
{

    printf("%s\n", stu.name);

}

// 数组类型的结构体变量作为函数形参
void testStructArr(struct student stu[])
{

    printf("%s\n", stu[4].name);

}

// 为已存在的类型名字命名新的名字(原来的名字仍然好用)
typedef int QingChun;
      // QingChun a = 0;
//typedef struct student Student;

// 声明并且重命名
//typedef struct student{
//    
//    char name[20];
//    char sex;
//    float score;
//    int age;
//    
//} Student;



int main(int argc, const char * argv[]) {

    // 定义一个结构体类型的变量
    // 变量类型 变量名 初值
    // 注意, 变量类型为: struct student
    // 变量名为: stu
    struct student stu = {0};
//    // 注意, 初值顺序与声明匹配
    struct student stu1 = {"QingC", 'n', 99.9, 23};
    
//    struct rect rec = {0};
//    
//    struct rect rec1 = {9.9, 5};
    
//    // 访问结构体变量的成员
//    stu.age = 25;
//    printf("%d\n", stu.age);
//    
//    
//    strcpy(stu.name, "丝袜");
//    printf("%s\n", stu.name);
    
    // 结构体可以整体赋值
    stu = stu1;
//    stu.score = stu1.score;
    printf("%.2f\n", stu.score);
    printf("%d\n", stu.age);
    
//    有三个学生,编程找出分数最高者以及年龄最小者.
    
//    struct diciple stu1 = {"zhangSan", 25, 99};
//    struct diciple stu2 = {"liSi", 26, 88};
//    struct diciple stu3 = {"wangWu", 24, 77};
////    float max = 0;
////    max = stu1.score > stu2.score ? stu1.score : stu2.score;
////    max = max > stu3.score ? max : stu3.score;
////    printf("分数最高)
//    
//    struct diciple tempStu = {0};
//    // 比较分数, 但返回整体信息 - 因为结构体变量可以整体赋值
//    tempStu = stu1.score > stu2.score ? stu1 : stu2;
//    tempStu = tempStu.score > stu3.score ? tempStu : stu3;
//    
//    // 输出分数最大学生的所有信息
//    printf("%s %d %.1f\n", tempStu.name, tempStu.age, tempStu.score);
//    
//    struct diciple minStu = {0};
//    minStu = stu1.age < stu2.age ? stu1 : stu2;
//    minStu = minStu.age < stu3.age ? minStu : stu3;
//        printf("%s %d %.1f\n", minStu.name, minStu.age, minStu.score);
//    
//    
//    // 结构体数组
//    struct student stu[2000] = {0};
//    
//    // 将第二名同学的年龄赋值为80
//    stu[1].age = 80;
    
//    struct student stu[3] = {
//        
//        {"QingC", 'n', 99.9, 23},
//        {"XiaoC", 'm', 89.9, 24},
//        {"XiaoQ", 'n', 99.5, 25}
//        
//    };
    
    //有5名学生保存在结构体数组中，编程查找成绩最高者，输出该学生全部信息
    
//    struct student stu[5] = {
//        
//        {"QingC", 'n', 99.9, 23},
//        {"XiaoC", 'm', 89.9, 24},
//        {"XiaoQ", 'n', 99.5, 25},
//        {"XiaoY", 'm', 34, 26},
//        {"XiaoQ", 'n', 56, 27}
//        
//    };
//    
//    struct student tempStu = {0};
//    for (int i = 0; i < 5; i++) {
//        if (tempStu.score < stu[i].score) {
//            tempStu = stu[i];
//        }
//    }
//     printf("%s  %c %d %.1f\n", tempStu.name, tempStu.sex, tempStu.age, tempStu.score);
//    
//    
////    对上述5名学生数组，按成绩从高到低排序，并输出
//    
//    for (int i = 0; i < 5 - 1; i++) {
//        for (int j = 0; j < 5 - i - 1; j++) {
//            if (stu[j].score > stu[j + 1].score) {
//                tempStu = stu[j];
//                stu[j] = stu[j + 1];
//                stu[j + 1] = tempStu;
//            }
//        }
//    }
//    for (int i = 0; i < 5; i++) {
//        printf("%s  %c %d %.1f\n", stu[i].name, stu[i].sex, stu[i].age, stu[i].score);
//    }
    
//    struct student stu = {"oicq", 'n', 66.6, 36};
    
//    struct student stu1[5]= {
//        
//                {"QingC", 'n', 99.9, 23},
//                {"XiaoC", 'm', 89.9, 24},
//                {"XiaoQ", 'n', 99.5, 25},
//                {"XiaoY", 'm', 34, 26},
//                {"XiaoQ", 'n', 56, 27}
//        
//            };
    
    testStruct(stu);
//    testStructArr(stu1);
    
    
    
    
    
    
    
    return 0;
}
